﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using DevExpress.XtraEditors;
using XCT.Class;
using XCT.Functions;

namespace XCT.Forms
{
    public partial class FormNguoiDung : DevExpress.XtraEditors.XtraForm
    {
        public FormNguoiDung()
        {
            InitializeComponent();
        }

        private FormMain formMain;
        public FormNguoiDung(FormMain formMain)
        {
            InitializeComponent();
            this.formMain = formMain;
        }

        #region "Biến"

        clsDangNhap clsdn = new clsDangNhap();
        clsDungChung clsdc = new clsDungChung();
        int intTrangThai = -1; // 0:Them, 1:Sua, 2:Xoa
        DataSet dtsNguoiDung,dtsPhanQuyen;

        #endregion

        #region "Sự Kiện"

        #region "Dùng Chung"

        private void FormNguoiDung_Load(object sender, EventArgs e)
        {
            fDocNguoiDung_XCT();
        }

        private void FormNguoiDung_FormClosed(object sender, FormClosedEventArgs e)
        {
            formMain.pFormNguoiDung = null;
        }

        private void FormNguoiDung_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.Modifiers == Keys.Control)
                {
                    switch (e.KeyCode)
                    {
                        case Keys.S:
                            if (intTrangThai == 0 || intTrangThai == 1)
                                if (XtraMessageBox.Show("Bạn có chắc muốn lưu không ?", "Thông tin lưu ý: ", MessageBoxButtons.YesNo) == DialogResult.Yes)
                                {
                                    if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung1")
                                    {

                                        grdNguoiDung_View.FocusedRowHandle = grdNguoiDung_View.FocusedRowHandle + 1;
                                        grdNguoiDung_View.CloseEditor();
                                        if (fLuuNguoiDung() == true)
                                        {
                                            XtraMessageBox.Show("Lưu thành công !", "Thông báo:");
                                            intTrangThai = -1;
                                            fDocNguoiDung_XCT();
                                        }
                                        else
                                        {
                                            XtraMessageBox.Show("Không thể lưu, vui lòng kiểm tra lại dữ liệu nhập!");
                                        }

                                    }
                                    else if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung2")
                                    {
                                        grdPhanQuyen_View.FocusedRowHandle = grdPhanQuyen_View.FocusedRowHandle + 1;
                                        grdPhanQuyen_View.CloseEditor();
                                        if (fLuuPhanQuyen() == true)
                                        {
                                            XtraMessageBox.Show("Lưu thành công !", "Thông báo:");
                                            intTrangThai = -1;
                                            fDocPhanQuyen_XCT();
                                        }
                                        else
                                        {
                                            XtraMessageBox.Show("Không thể lưu, vui lòng kiểm tra lại dữ liệu nhập!");
                                        }
                                    }
                                }
                            return;
                        case Keys.A:
                            if (intTrangThai == -1 || intTrangThai == 0)
                            {
                                if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung1")
                                {
                                    grdNguoiDung_View.AddNewRow();
                                    //grdNguoiDung_View.SetRowCellValue(grdNguoiDung_View.FocusedRowHandle, grdNguoiDung_View.Columns.ColumnByFieldName("CLLH"), false);
                                    //grdNguoiDung_View.SetRowCellValue(grdNguoiDung_View.FocusedRowHandle, grdNguoiDung_View.Columns.ColumnByFieldName("BTP"), false);
                                    //grdNguoiDung_View.SetRowCellValue(grdNguoiDung_View.FocusedRowHandle, grdNguoiDung_View.Columns.ColumnByFieldName("EDC"), false);
                                    //grdNguoiDung_View.SetRowCellValue(grdNguoiDung_View.FocusedRowHandle, grdNguoiDung_View.Columns.ColumnByFieldName("DBG"), false);

                                    clsdc.editGrid(grdNguoiDung_View, true, null);

                                    intTrangThai = 0;
                                    lblMsg.Text = "Bạn đang ở chế độ thêm, vui lòng nhấn [Ctrl+S] để lưu !"; lblMsg.Visible = true;
                                }
                            }
                            else
                            {
                                XtraMessageBox.Show("Bạn phải lưu trước khi chuyển thao tác mới...", "Thông Báo:");
                            }
                            return;
                        case Keys.E:
                            if (intTrangThai == -1 || intTrangThai == 1)
                            {
                                if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung1")
                                {
                                    ArrayList arr = new ArrayList();
                                    arr.Add("TenNV"); //cột tên nhan vien
                                    arr.Add("Pass"); //cột mật khẩu

                                    clsdc.editGrid(grdNguoiDung_View, true, arr);

                                    intTrangThai = 1;
                                    lblMsg.Text = "Bạn đang ở chế độ sửa, vui lòng nhấn [Ctrl+S] để lưu !"; lblMsg.Visible = true;
                                }
                                else if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung2")
                                {
                                    ArrayList arr = new ArrayList();
                                    arr.Add("CLLH"); //cột cán luyện lưu hóa
                                    arr.Add("BTP"); //cột bán thành phẩm
                                    arr.Add("EDC"); //cột ép dấu chân
                                    arr.Add("DBG"); //cột dán bộ ghép

                                    clsdc.editGrid(grdPhanQuyen_View, true, arr);

                                    intTrangThai = 1;
                                    lblMsg.Text = "Bạn đang ở chế độ sửa, vui lòng nhấn [Ctrl+S] để lưu !"; lblMsg.Visible = true;
                                }
                            }
                            else
                            {
                                XtraMessageBox.Show("Bạn phải lưu trước khi chuyển thao tác mới...", "Thông Báo:");
                            }
                            return;
                        case Keys.D:
                            if (intTrangThai == -1 || intTrangThai == 2)
                            {
                                if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung1")
                                {
                                    intTrangThai = 2;
                                    if (intTrangThai == 2)
                                        if (XtraMessageBox.Show("Bạn có chắc muốn xóa dòng này không ?", "Thông tin lưu ý: ", MessageBoxButtons.YesNo) == DialogResult.Yes)
                                        {
                                            if (fLuuNguoiDung() == true)
                                            {
                                                XtraMessageBox.Show("Xóa thành công !", "Thông báo:");
                                                intTrangThai = -1;
                                                fDocNguoiDung_XCT();
                                            }
                                            else
                                            {
                                                XtraMessageBox.Show("Không thể xóa, vui lòng kiểm tra lại dữ liệu !");
                                            }
                                        }
                                }
                            }
                            else
                            {
                                XtraMessageBox.Show("Bạn phải lưu trước khi chuyển thao tác mới...", "Thông Báo:");
                            }
                            return;
                    }
                }
                else if (e.KeyCode == Keys.F5)
                {
                    intTrangThai = -1;
                    if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung1")
                    {
                        fDocNguoiDung_XCT();
                    }
                    else if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung2")
                    {
                        fDocPhanQuyen_XCT();
                    }
                }
                else if (e.KeyCode == Keys.Escape)
                {
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

        //Sự kiện kiểm tra Tab trước khi chuyển Tab
        private void tabNguoiDung_SelectedPageChanging(object sender, DevExpress.XtraTab.TabPageChangingEventArgs e)
        {
            if (intTrangThai != -1)
            {
                XtraMessageBox.Show("Vui lòng nhấn [Ctrl+S] để lưu trước khi chuyển tab ...", "Thông Báo:");
                e.Cancel = true;
            }
        }

        //Sự kiện chuyển Tab
        private void tabNguoiDung_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)
        {
            if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung1")
            {
                fDocNguoiDung_XCT();
            }
            else if (tabNguoiDung.SelectedTabPage.Name == "tabNguoiDung2")
            {
                fDocPhanQuyen_XCT();
            }
        }

        #endregion

        #region "tabNguoiDung1"

        private void grdNguoiDung_View_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        {
            DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;
            if (view.FocusedColumn.FieldName == "MaNV")
                if (string.IsNullOrEmpty(e.Value.ToString()) == true)
                {
                    e.Valid = false;
                }
        }

        #endregion

        #endregion

        #region "Hàm"

        #region "tabNguoiDung1"

        //Đọc nguoi dung
        private void fDocNguoiDung_XCT()
        {
            dtsNguoiDung = new DataSet();
            clsDangNhap clsdn = new clsDangNhap();
            dtsNguoiDung = clsdn.DocNguoiDung_XCT();
            grdNguoiDung.DataSource = dtsNguoiDung.Tables[0].DefaultView;

            lblMsg.Visible = false;
            clsdc.editGrid(grdNguoiDung_View, false, null);
        }

        // Lưu nguoi dùng theo trạng thái
        private Boolean fLuuNguoiDung()
        {
            try
            {
                switch (intTrangThai)
                {
                    case 0: //trang thai = 0: Thêm
                        if (dtsNguoiDung.Tables[0].GetChanges(DataRowState.Added).Rows.Count > 0)
                        {
                            for (int intRow = 0; intRow < dtsNguoiDung.Tables[0].GetChanges(DataRowState.Added).Rows.Count; intRow++)
                            {
                                clsdn = new clsDangNhap();
                                clsdn.User = dtsNguoiDung.Tables[0].GetChanges(DataRowState.Added).Rows[intRow]["MaNV"].ToString();
                                clsdn.TenUser = dtsNguoiDung.Tables[0].GetChanges(DataRowState.Added).Rows[intRow]["TenNV"].ToString();
                                clsdn.Pass = dtsNguoiDung.Tables[0].GetChanges(DataRowState.Added).Rows[intRow]["Pass"].ToString();
                                //clsdn.CLLH = Convert.ToInt32(dtsNguoiDung.Tables[0].GetChanges(DataRowState.Added).Rows[intRow]["CLLH"]);
                                //clsdn.BTP = Convert.ToInt32(dtsNguoiDung.Tables[0].GetChanges(DataRowState.Added).Rows[intRow]["BTP"]);
                                //clsdn.EDC = Convert.ToInt32(dtsNguoiDung.Tables[0].GetChanges(DataRowState.Added).Rows[intRow]["EDC"]);
                                //clsdn.DBG = Convert.ToInt32(dtsNguoiDung.Tables[0].GetChanges(DataRowState.Added).Rows[intRow]["DBG"]);

                                if (clsdn.ThemNguoiDung() == false)
                                    return false;
                            }
                            return true;
                        }
                        return true;
                    case 1: //trang thai = 1: sửa
                        if (dtsNguoiDung.Tables[0].GetChanges(DataRowState.Modified).Rows.Count > 0)
                        {
                            for (int intRow = 0; intRow < dtsNguoiDung.Tables[0].GetChanges(DataRowState.Modified).Rows.Count; intRow++)
                            {
                            clsdn = new clsDangNhap();
                                clsdn.User = dtsNguoiDung.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["MaNV"].ToString();
                                clsdn.TenUser = dtsNguoiDung.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["TenNV"].ToString();
                                clsdn.Pass = dtsNguoiDung.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["Pass"].ToString();
                                //clsdn.CLLH = Convert.ToInt32(dtsNguoiDung.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["CLLH"]);
                                //clsdn.BTP = Convert.ToInt32(dtsNguoiDung.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["BTP"]);
                                //clsdn.EDC = Convert.ToInt32(dtsNguoiDung.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["EDC"]);
                                //clsdn.DBG = Convert.ToInt32(dtsNguoiDung.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["DBG"]);

                                if (clsdn.SuaNguoiDung() == false)
                                    return false;
                            }
                            return true;
                        }
                        return true;
                    case 2: //trang thai = 2: xóa
                        clsdn.User = grdNguoiDung_View.GetRowCellValue(grdNguoiDung_View.FocusedRowHandle, grdNguoiDung_View.Columns.ColumnByFieldName("MaNV")).ToString();
                        if (clsdn.XoaNguoiDung() == false)
                        {
                            return false;
                        }
                        return true;
                    default:
                        return true;
                }
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        #endregion
        
        #region "tabNguoiDung2"

        //Đọc phân quyền
        private void fDocPhanQuyen_XCT()
        {
            dtsPhanQuyen = new DataSet();
            clsDangNhap clsdn = new clsDangNhap();
            dtsPhanQuyen = clsdn.DocNguoiDung_XCT();
            grdPhanQuyen.DataSource = dtsPhanQuyen.Tables[0].DefaultView;

            lblMsg.Visible = false;
            clsdc.editGrid(grdPhanQuyen_View, false, null);
        }

        // Lưu phan quyền theo trạng thái
        private Boolean fLuuPhanQuyen()
        {
            try
            {
                switch (intTrangThai)
                {
                    case 1: //trang thai = 1: sửa
                        if (dtsPhanQuyen.Tables[0].GetChanges(DataRowState.Modified).Rows.Count > 0)
                        {
                            for (int intRow = 0; intRow < dtsPhanQuyen.Tables[0].GetChanges(DataRowState.Modified).Rows.Count; intRow++)
                            {
                                clsdn = new clsDangNhap();
                                clsdn.User = dtsPhanQuyen.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["MaNV"].ToString();
                                clsdn.CLLH = Convert.ToInt32(dtsPhanQuyen.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["CLLH"]);
                                clsdn.BTP = Convert.ToInt32(dtsPhanQuyen.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["BTP"]);
                                clsdn.EDC = Convert.ToInt32(dtsPhanQuyen.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["EDC"]);
                                clsdn.DBG = Convert.ToInt32(dtsPhanQuyen.Tables[0].GetChanges(DataRowState.Modified).Rows[intRow]["DBG"]);

                                if (clsdn.SuaPhanQuyen() == false)
                                    return false;
                            }
                            return true;
                        }
                        return true;
                    default:
                        return true;
                }
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        #endregion        
        
        #endregion

    }
}